/* 
给你一个含 n 个整数的数组 nums ，其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字，并以数组的形式返回结果。

示例：
输入：nums = [4,3,2,7,8,2,3,1]
输出：[5,6]

你能在不使用额外空间且时间复杂度为 O(n) 的情况下解决这个问题吗? 你可以假定返回的数组不算在额外空间内。
*/

/* 
思路1:
此类题可抓住索引与每项元素有对应关系：每项元素在索引+1的区间内
声明一个和目标数组长度相同的数组，遍历目标数组，把第i项放入索引为nums[i]-1的新数组中，遍历新数组，为0的项对应的索引值+1就是消失的数
时间复杂度：O(n)
*/

/**
 * @param {number[]} nums
 * @return {number[]}
 */
 var findDisappearedNumbers = function(nums) {
    const n=nums.length

    // 思路1
    let newArr=new Array(n).fill(0)
    let ret=[]
    // 遍历目标数组
    for (let i = 0; i < n; i++) {
        newArr[nums[i]-1]=nums[i]
    }
    for (let j = 0; j < n; j++) {
        if(newArr[j]==0){
            ret.push(j+1)
        }
    }
    return ret
};
// 运行

let nums = [4,3,2,7,8,2,3,1]
console.log(findDisappearedNumbers(nums));